package com.cskaoyan.javase._1interface._2notice;

/**
 * Java8及以后的JDK版本中,接口中不再全是抽象方法了
 * 因为Java8中,接口新增了默认实现方法和静态实现方法,两种带有方法体的实现方法
 *
 * 默认实现方法:
 * default 返回值类型 方法名(形参列表){
 *     // 方法体
 * }
 * 注: 方法的访问权限修饰符默认是public 不可更改
 * 默认实现方法可以看成是抽象类中的成员方法,接口不能创建对象
 * 不能直接调用该实现方法,需要创建接口的子类对象,调用它
 * 默认实现方法不是抽象方法,不需要子类强制实现,但是子类可以选择重写
 *
 * 静态实现方法:
 * static 返回值类型 方法名(形参列表){
 *     // 方法体
 * }
 * 注: 方法的访问权限修饰符默认是public 不可更改
 * 这个方法就是一个静态方法,调用时使用接口名.调用
 * 需要注意的是,接口中的静态实现方法,只能用接口名调用,接口子类类名无法调用它
 *
 * 总之,日常开发中,接口中,大多数情况下,都是只有抽象方法的
 * 实现方法有独特的用途,除非特别用必要,不然不要乱写进接口.
 *
 * @since 14:28
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        IAImpl ia = new IAImpl();
        ia.test();

        IA.testStatic();
        // IAImpl.

        A a = new A();
        a.test();
        a.test2();
        a.test3();
    }
}

interface IA {
    // 默认实现方法
    default void test() {
        System.out.println("hello world!");
    }

    // 静态实现方法
    static void testStatic() {
        System.out.println("我是静态方法!");
    }
}

interface IB {
    default void test2() {
        System.out.println("hello world2");
    }
}

interface IC {
    default void test3() {
        System.out.println("hello world3");
    }
}

class A implements IA, IB, IC {

}

class IAImpl implements IA {
    @Override
    public void test() {
        System.out.println("6666");
    }
}